package com.shujia

import scala.collection.mutable

object Demo12Map {
  def main(args: Array[String]): Unit = {
    /**
     * Map：其中的每一个元素都必须是KV格式，可以通过Key获取Value，无序，不可变
     */

    // 创建一个Map
    val map: Map[String, String] = Map[String, String](("k1", "v1"), Tuple2("k2", "v2"), "k3" -> "v3", "k4".->("v4"))
    println(map)

    // 通过Key获取Value 推荐使用getOrElse
    println(map.get("k1")) // Some(v1)
    println(map.get("k1").get) // v1
    println(map("k1")) // v1
    println(map.get("kk1")) // None
    println(map.getOrElse("k1", "default")) // v1
    println(map.getOrElse("kk1", "default")) // default

    /**
     * 通过get方法取值返回的类型为：Option
     * Option类型有两个子类：Some、None
     * 当有值时即为Some，没有值时则为None
     * Option适用于一些“模棱两可”（不确定到底有没有值）的情况下
     *
     */

    /**
     * Map在进行map、foreach、groupBy、filter等操作时，每一个元素会作为一个二元组
     * 所以在传入函数时，只需要用一个参数接收
     */

    /**
     * 可变的Map：HashMap
     */
    val hashMap: mutable.HashMap[String, Int] = mutable.HashMap[String, Int]("k1" -> 1, "k2" -> 2, "k3" -> 3)

    /**
     * 增删改
     */
    hashMap.put("k4", 4)
    hashMap.+=(("k5", 5))
    println(hashMap)

    hashMap.remove("k3")
    hashMap.-=("k1")
    println(hashMap)

    // 只能直接对value进行修改，如果需要修改Key可以先remove再put
    hashMap("k2") = 22
    println(hashMap)



  }

}
